package handlers

import (
    "encoding/json"
    "net/http"
    "shopping-backend/models"
    "strconv"
    "github.com/gorilla/mux"
)

// 获取用户的购物车
    // @Summary 获取购物车信息
    // @Description 根据用户ID获取用户的购物车详情。
    // @Tags 购物车
    // @Accept json
    // @Produce json
    // @Param id path int true "用户ID"
    // @Success 200 {array} models.CartItem "购物车内容"
    // @Failure 400 {string} string "无效的用户ID"
    // @Failure 500 {string} string "服务器内部错误"
    // @Router /cart/{id} [get]
func GetCart(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    userID, err := strconv.Atoi(vars["id"])
    if err != nil {
        http.Error(w, "无效的用户ID", http.StatusBadRequest)
        return
    }

    // 获取指定用户的购物车，包括产品名称和价格
    cartItems, err := models.GetCartByUserID(userID)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // 返回购物车的 JSON 响应
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusOK)
    json.NewEncoder(w).Encode(cartItems)
}

// 向购物车添加商品
    // @Summary 添加商品到购物车
    // @Description 根据请求体中的数据将商品添加到用户的购物车。
    // @Tags 购物车
    // @Accept json
    // @Produce json
    // @Param cartItem body models.CartItem true "购物车商品信息"
    // @Success 201 {string} string "商品添加成功"
    // @Failure 400 {string} string "请求中的数据无效"
    // @Failure 500 {string} string "保存购物车数据时出错"
    // @Router /cart/add [post]
func AddToCart(w http.ResponseWriter, r *http.Request) {
    var cartItem models.CartItem
    if err := json.NewDecoder(r.Body).Decode(&cartItem); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // 调用 models.AddToCart 方法将商品添加到购物车
    err := models.AddToCart(cartItem)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // 返回成功响应
    w.WriteHeader(http.StatusCreated)
}

// 从购物车删除商品
    // @Summary 删除购物车中的商品
    // @Description 根据用户ID和商品ID从购物车中删除指定的商品。
    // @Tags 购物车
    // @Produce json
    // @Param user_id path int true "用户ID"
    // @Param product_id path int true "商品ID"
    // @Success 200 {string} string "商品删除成功"
    // @Failure 400 {string} string "无效的用户ID或商品ID"
    // @Failure 404 {string} string "购物车中未找到产品"
    // @Failure 500 {string} string "服务器内部错误"
    // @Router /cart/delete/{user_id}/{product_id} [delete]
func DeleteFromCart(w http.ResponseWriter, r *http.Request) {
    // 从 URL 中提取用户 ID 和商品 ID
    vars := mux.Vars(r)
    userID, err := strconv.Atoi(vars["user_id"])
    if err != nil {
        http.Error(w, "无效的用户ID", http.StatusBadRequest)
        return
    }
    productID, err := strconv.Atoi(vars["product_id"])
    if err != nil {
        http.Error(w, "无效的商品ID", http.StatusBadRequest)
        return
    }

    // 调用 models.DeleteFromCart 删除商品
    rowsAffected, err := models.DeleteFromCart(userID, productID)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // 如果没有删除任何行，表示商品未找到
    if rowsAffected == 0 {
        http.Error(w, "购物车中未找到产品", http.StatusNotFound)
        return
    }

    // 返回成功响应
    w.WriteHeader(http.StatusOK)
}
